﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace Jurassic_Island
{
    public partial class FormEventos : Form
    {
        private FormInsertEventoLocalizacion fInsertEvLoc;
        private FormInsertEventoAleatorio fInsertEvAleat;
        private FormInsertEventoGuion fInsertEvGuion;
        private DataSet dsEvLoc;
        private DataSet dsEvGuion;
        private DataSet dsEvAleat;
        private String exprBuscar = @"^[a-zA-Z0-9ñÑ ]*$";

        public FormEventos()
        {
            InitializeComponent();
        }

        private void RefrescarGridEventosLocalizacion()
        {
            try
            {
                ENEventosLocalizacion enEvLoc = new ENEventosLocalizacion();
                dsEvLoc = new DataSet();

                dsEvLoc = enEvLoc.ObtenerListaEventosLocalizacion();

                dgvEvLocalizacion.DataSource = dsEvLoc;
                dgvEvLocalizacion.DataMember = "Eventos_Localizacion";

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void RefrescarGridEventosAleatorios()
        {
             try
            {
                ENEventosAleatorios enEvAleat = new ENEventosAleatorios();
                dsEvAleat = new DataSet();

                dsEvAleat = enEvAleat.ObtenerListaEventosAleatorios();

                dgvEvAleatorio.DataSource = dsEvAleat;
                dgvEvAleatorio.DataMember = "Eventos_Aleatorios";

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void RefrescarGridEventosGuion()
        {
            try
            {
                ENEventosGuion enEvGuion = new ENEventosGuion();
                dsEvGuion = new DataSet();
                dsEvGuion = enEvGuion.ObtenerListaEventosGuion();

                dgvEvGuion.DataSource = dsEvGuion;
                dgvEvGuion.DataMember = "Eventos_Guion";

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        private void btCerrar_Click(object sender, EventArgs e)
        {
            Hide();
        }

        private void FormEventos_Load(object sender, EventArgs e)
        {
            RefrescarGridEventosAleatorios();
            RefrescarGridEventosGuion();
            RefrescarGridEventosLocalizacion();
        }

        private void btInsertar_Click(object sender, EventArgs e)
        {
            if (tcEventos.SelectedTab == tabAleatorio)
            {
                fInsertEvAleat = new FormInsertEventoAleatorio();
                fInsertEvAleat.ShowDialog();
                RefrescarGridEventosAleatorios();
                fInsertEvAleat.Dispose();                
            }
            else if (tcEventos.SelectedTab == tabGuion)
            {
                fInsertEvGuion = new FormInsertEventoGuion();
                fInsertEvGuion.ShowDialog();
                RefrescarGridEventosGuion();
                fInsertEvGuion.Dispose();              
            }
            else if (tcEventos.SelectedTab == tabLocalizacion)
            {
                fInsertEvLoc = new FormInsertEventoLocalizacion();
                fInsertEvLoc.ShowDialog();
                RefrescarGridEventosLocalizacion();
                fInsertEvLoc.Dispose();
            }
        }

        private void btBorrar_Click(object sender, EventArgs e)
        {
            if (tcEventos.SelectedTab == tabAleatorio)
            {
                bool cancelar = false;
                foreach (DataGridViewRow dgvr in dgvEvAleatorio.SelectedRows)
                {
                    if (!cancelar)
                    {
                        switch (MessageBox.Show("¿Borrar el evento aleatorio (ID=" + dgvr.Cells[0].Value.ToString() + ")?", "Borrar evento aleatorio", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation))
                        {
                            case DialogResult.Yes:
                                    ENEventosAleatorios enEvaleat = new ENEventosAleatorios();
                                    enEvaleat.Id_evaleat = int.Parse(dgvr.Cells[0].Value.ToString());
                                    enEvaleat.Nombre_evaleat = dgvr.Cells[1].Value.ToString();
                                    enEvaleat.Efecto_evaleat = double.Parse(dgvr.Cells[2].Value.ToString());
                                    enEvaleat.BorrarEventoAleatorio();
                                    break;
                            case DialogResult.No:
                                break;
                            case DialogResult.Cancel:
                                cancelar = true;
                                break;
                        }
                    }

                }

                RefrescarGridEventosAleatorios();
            }
            else if (tcEventos.SelectedTab == tabGuion)
            {
                bool cancelar = false;
                foreach (DataGridViewRow dgvr in dgvEvGuion.SelectedRows)
                {
                    if (!cancelar)
                    {
                        switch (MessageBox.Show("¿Borrar el evento de guión (ID=" + dgvr.Cells[0].Value.ToString() + ")?", "Borrar evento de guión", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation))
                        {
                            case DialogResult.Yes:
                                    ENEventosGuion enEvGuion = new ENEventosGuion();
                                    enEvGuion.Id_evguion = int.Parse(dgvr.Cells[0].Value.ToString());
                                    enEvGuion.Nombre_evguion = dgvr.Cells[1].Value.ToString();
                                    enEvGuion.Descripcion_evguion = dgvr.Cells[2].Value.ToString();
                                    enEvGuion.BorrarEventoGuion();
                                    
                                    break;
                            case DialogResult.No:
                                break;
                            case DialogResult.Cancel:
                                cancelar = true;
                                break;
                        }
                    }

                }

                RefrescarGridEventosGuion();
            }
            else if (tcEventos.SelectedTab == tabLocalizacion)
            {
                bool cancelar = false;
                foreach (DataGridViewRow dgvr in dgvEvLocalizacion.SelectedRows)
                {
                    if (!cancelar)
                    {
                        switch (MessageBox.Show("¿Borrar el evento de localización (ID=" + dgvr.Cells[0].Value.ToString() + ")?", "Borrar evento de localización", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation))
                        {
                            case DialogResult.Yes:
                                
                                    ENEventosLocalizacion enEvLoc = new ENEventosLocalizacion();
                                    enEvLoc.Id_evloc = int.Parse(dgvr.Cells[0].Value.ToString());
                                    enEvLoc.Nombre_evloc = dgvr.Cells[1].Value.ToString();
                                    enEvLoc.Sitio_evloc = dgvr.Cells[2].Value.ToString();
                                    enEvLoc.Efecto_evloc = double.Parse(dgvr.Cells[3].Value.ToString());
                                    enEvLoc.BorrarEventoLocalizacion();
                                    break;
                            case DialogResult.No:
                                break;
                            case DialogResult.Cancel:
                                cancelar = true;
                                break;
                        }
                    }

                }

                RefrescarGridEventosLocalizacion();
            }
        }

        private void btEditar_Click(object sender, EventArgs e)
        {
            if (tcEventos.SelectedTab == tabAleatorio)
            {

                if (dgvEvAleatorio.RowCount > 0)
                {
                    int linea = dgvEvAleatorio.Rows.IndexOf(dgvEvAleatorio.SelectedRows[0]);
                    foreach (DataGridViewRow dgvr in dgvEvAleatorio.SelectedRows)
                    {
                        ENEventosAleatorios enEvAleat = new ENEventosAleatorios();
                        enEvAleat.Id_evaleat = int.Parse(dgvr.Cells[0].Value.ToString());
                        enEvAleat.Nombre_evaleat = dgvr.Cells[1].Value.ToString();
                        enEvAleat.Efecto_evaleat = double.Parse(dgvr.Cells[2].Value.ToString());
                        fInsertEvAleat = new FormInsertEventoAleatorio(enEvAleat);
                        fInsertEvAleat.ShowDialog();
                        fInsertEvAleat.Dispose();

                    }
                    RefrescarGridEventosAleatorios();
                    dgvEvAleatorio.SelectedRows[0].Selected = false;
                    dgvEvAleatorio.Rows[linea].Selected = true;
                }
            }
            else if (tcEventos.SelectedTab == tabGuion)
            {
                if (dgvEvGuion.RowCount > 0)
                {
                    int linea = dgvEvGuion.Rows.IndexOf(dgvEvGuion.SelectedRows[0]);
                    foreach (DataGridViewRow dgvr in dgvEvGuion.SelectedRows)
                    {
                        ENEventosGuion enEvGuion = new ENEventosGuion();
                        enEvGuion.Id_evguion = int.Parse(dgvr.Cells[0].Value.ToString());
                        enEvGuion.Nombre_evguion = dgvr.Cells[1].Value.ToString();
                        enEvGuion.Descripcion_evguion = dgvr.Cells[2].Value.ToString();
                        fInsertEvGuion= new FormInsertEventoGuion(enEvGuion);
                        fInsertEvGuion.ShowDialog();
                        fInsertEvGuion.Dispose();

                    }
                    RefrescarGridEventosGuion();
                    dgvEvGuion.SelectedRows[0].Selected = false;
                    dgvEvGuion.Rows[linea].Selected = true;
                }
            }
            else if (tcEventos.SelectedTab == tabLocalizacion)
            {
                if (dgvEvLocalizacion.RowCount > 0)
                {
                    int linea = dgvEvLocalizacion.Rows.IndexOf(dgvEvLocalizacion.SelectedRows[0]);
                    foreach (DataGridViewRow dgvr in dgvEvLocalizacion.SelectedRows)
                    {
                        ENEventosLocalizacion enEvLoc = new ENEventosLocalizacion();
                        enEvLoc.Id_evloc = int.Parse(dgvr.Cells[0].Value.ToString());
                        enEvLoc.Nombre_evloc = dgvr.Cells[1].Value.ToString();
                        enEvLoc.Sitio_evloc = dgvr.Cells[2].Value.ToString();
                        enEvLoc.Efecto_evloc = double.Parse(dgvr.Cells[3].Value.ToString());
                        fInsertEvLoc = new FormInsertEventoLocalizacion(enEvLoc);
                        fInsertEvLoc.ShowDialog();
                        fInsertEvLoc.Dispose();

                    }
                    RefrescarGridEventosLocalizacion();
                    dgvEvLocalizacion.SelectedRows[0].Selected = false;
                    dgvEvLocalizacion.Rows[linea].Selected = true;
                }
            }
        }
        
        private void btBuscar_Click(object sender, EventArgs e)
        {
            if (tcEventos.SelectedTab == tabAleatorio)
            {
                ENEventosAleatorios enEvAleat = new ENEventosAleatorios();

                if (Regex.Match(tbBuscar.Text, exprBuscar).Success)
                {
                    try
                    {
                        
                        dsEvAleat = enEvAleat.BuscarEventosAleatorios(tbBuscar.Text);
                        dgvEvAleatorio.DataSource = dsEvAleat;
                        dgvEvAleatorio.DataMember = "Eventos_Aleatorios";
                        epEventos.SetError(tbBuscar, "");
                        
                    }

                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else if (tbBuscar.Text == "")
                {
                    dsEvAleat = enEvAleat.ObtenerListaEventosAleatorios();
                    dgvEvAleatorio.DataSource = dsEvAleat;
                    dgvEvAleatorio.DataMember = "Eventos_Aleatorios";
                    epEventos.SetError(tbBuscar, "");
                }
                else
                {
                    epEventos.SetError(tbBuscar, "La busqueda no produjo resultados.");
                    MessageBox.Show("La busqueda no produjo resultados.", "Error de búsqueda.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (tcEventos.SelectedTab == tabGuion)
            {
                ENEventosGuion enEvGuion = new ENEventosGuion();

                if (Regex.Match(tbBuscar.Text, exprBuscar).Success)
                {
                    try
                    {
                        dsEvGuion = enEvGuion.BuscarEventosGuion(tbBuscar.Text);
                        dgvEvGuion.DataSource = dsEvGuion;
                        dgvEvGuion.DataMember = "Eventos_Guion";
                        epEventos.SetError(tbBuscar, "");
                    }

                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else if (tbBuscar.Text == "")
                {
                    dsEvGuion = enEvGuion.ObtenerListaEventosGuion();
                    dgvEvGuion.DataSource = dsEvGuion;
                    dgvEvGuion.DataMember = "Eventos_Guion";
                    epEventos.SetError(tbBuscar, "");
                }
                else
                {
                    epEventos.SetError(tbBuscar, "Introduzca un texto válido.");
                    MessageBox.Show("Introduzca un texto válido.", "Error de búsqueda.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (tcEventos.SelectedTab == tabLocalizacion)
            {
                ENEventosLocalizacion enEvLoc = new ENEventosLocalizacion();

                if (Regex.Match(tbBuscar.Text, exprBuscar).Success)
                {
                    try
                    {
                        dsEvLoc = enEvLoc.BuscarEventosLocalizacion(tbBuscar.Text);
                        dgvEvLocalizacion.DataSource = dsEvLoc;
                        dgvEvLocalizacion.DataMember = "Eventos_Localizacion";
                        epEventos.SetError(tbBuscar, "");
                    }

                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else if (tbBuscar.Text == "")
                {
                    dsEvLoc = enEvLoc.ObtenerListaEventosLocalizacion();
                    dgvEvLocalizacion.DataSource = dsEvLoc;
                    dgvEvLocalizacion.DataMember = "Eventos_Localizacion";
                    epEventos.SetError(tbBuscar, "");
                }
                else
                {
                    epEventos.SetError(tbBuscar, "Introduzca un texto válido.");
                    MessageBox.Show("Introduzca un texto válido.", "Error de búsqueda.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void insertarLocalizacionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tcEventos.SelectedTab = tabLocalizacion;
            btInsertar_Click(sender, e);
        }

        private void editarLocalizacionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tcEventos.SelectedTab = tabLocalizacion;
            btEditar_Click(sender, e);
        }

        private void borrarLocalizacionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tcEventos.SelectedTab = tabLocalizacion;
            btBorrar_Click(sender, e);
        }

        private void insertarGuionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tcEventos.SelectedTab = tabGuion;
            btInsertar_Click(sender, e);
        }

        private void editarGuionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tcEventos.SelectedTab = tabGuion;
            btEditar_Click(sender, e);
        }

        private void borrarGuionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tcEventos.SelectedTab = tabGuion;
            btEditar_Click(sender, e);
        }

        private void insertarAleatorioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tcEventos.SelectedTab = tabAleatorio;
            btInsertar_Click(sender, e);
        }

        private void editarAleatorioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tcEventos.SelectedTab = tabAleatorio;
            btEditar_Click(sender, e);
        }

        private void borrarAleatorioToolStripMenuItem_Click(object sender, EventArgs e)
        {
            tcEventos.SelectedTab = tabAleatorio;
            btBorrar_Click(sender, e);
        }

        private void tbBuscar_DoubleClick(object sender, EventArgs e)
        {
            tbBuscar.Text = "";
        }

        private void tbBuscar_TextChanged(object sender, EventArgs e)
        {
            if (!Regex.IsMatch(tbBuscar.Text, exprBuscar))
            {
                epEventos.SetError(tbBuscar, "Introduzca un texto válido.");
            }
            else
            {
                epEventos.SetError(tbBuscar, "");
            }
        }

    }
}

       
